package com.sicnu.resources.mapper;

import com.sicnu.resources.bean.entity.Resource;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * ResourceMapper 接口，定义资源相关的数据库操作方法。
 * @author 怨九己
 */
public interface ResourceMapper {

    /**
     * 根据 resourceId 查询资源。
     *
     * @param resourceId 资源 ID
     * @return 查询到的资源对象
     */
    Resource findById(@Param("resourceId") Integer resourceId);

    /**
     * 插入资源。
     *
     * @param resource 资源对象
     */
    void insert(Resource resource);

    /**
     * 删除资源。
     *
     * @param resourceId 资源 ID
     */
    void delete(@Param("resourceId") Integer resourceId);

    /**
     * 根据资源名称和标签搜索资源（支持分页）。
     *
     * @param resourceName 资源名称（模糊查询）
     * @param tag          资源标签（模糊查询）
     * @param offset       分页偏移量
     * @param pageSize     每页大小
     * @return 符合条件的资源列表
     */
    List<Resource> searchResourcesByName(
            @Param("resourceName") String resourceName,
            @Param("tag") String tag,
            @Param("offset") int offset,
            @Param("pageSize") int pageSize);

    /**
     * 统计搜索结果的总条数。
     *
     * @param resourceName 资源名称（模糊查询）
     * @param tag          资源标签（模糊查询）
     * @return 符合条件的资源总数
     */
    Long countSearchResourcesByName(
            @Param("resourceName") String resourceName,
            @Param("tag") String tag);

    /**
     * 更新资源（只允许修改 resourceType, resourceDescription, 和 tag）。
     *
     * @param resource 资源对象
     */
    void updateResource(Resource resource);

    /**
     * 分页查询资源。
     *
     * @param offset   分页偏移量
     * @param pageSize 每页大小
     * @return 资源列表
     */
    List<Resource> queryPage(
            @Param("offset") int offset,
            @Param("pageSize") int pageSize);

    /**
     * 查询资源总数。
     *
     * @return 资源总数
     */
    Long countTotalResources();
}